/* ConfigParser.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 09/28/2016
 *  Last Modified   : 12/26/2017
 * 
 */

#pragma once
#ifndef ymp_ConfigurationFiles_ConfigParser_H
#define ymp_ConfigurationFiles_ConfigParser_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include <string>
#include "ConfigTypes.h"
namespace ymp{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void append_extension(std::string& filename, const std::string& extension = "cfg");
std::string get_extension(const std::string& filename);
bool case_insensitive_equals(const std::string& x, const std::string& y);
////////////////////////////////////////////////////////////////////////////////
ConfigValue parse_acfg_string(const char*& str);
ConfigValue parse_acfg_string(const std::string& str);
ConfigValue parse_acfg_file(const std::string& filename);
////////////////////////////////////////////////////////////////////////////////
ConfigValue parse_json_string(const char*& str);
ConfigValue parse_json_string(const std::string& str);
ConfigValue parse_json_file(const std::string& filename);
////////////////////////////////////////////////////////////////////////////////
ConfigValue parse_using_extension(const std::string& filename);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
#endif
